section .text
global _start

_start:
    and rsp, 0xFFFFFFFFFFFFFFF0  ; 对齐到 16 字节
    ; 1. 设置堆栈
    mov rsp, stack_top      ; 设置栈顶

    ; 2. 初始化段寄存器（仅必要段）
    xor eax, eax            ; 清零寄存器
    mov ax, ds              ; 设置数据段
    mov ds, ax
    mov es, ax
    mov fs, ax
    mov gs, ax

    ; 3. 清零基址寄存器
    xor rbp, rbp            ; 清除 RBP（C 函数可能依赖）

    ; 4. 调用 main 函数
    extern main
    ; 假设 argc=1, argv 指向空
    xor edi, edi            ; argc = 0
    xor rsi, rsi            ; argv = NULL
    call main               ; 跳转到 C 的 main 函数

    ; 5. 系统调用：退出程序
    mov rax, 60             ; syscall: exit
    xor rdi, rdi            ; 状态码 0
    syscall

section .bss
    resb 4096               ; 分配 4KB 栈空间
stack_top:
